<?php

if (!defined('IN_XLP')) {
    exit('Access Denied!');
}

/**
 * Description of userMsgModel
 * 用户消息模型
 * @author xlp
 */
class userMsgModel extends model {

    function __construct() {
        parent::__construct();
        $this->dbTable = 'user_msg_0';
    }

    /*
     * 添加消息
     * @param $uid int UID
     * @param $fid int 来源内容ID，方便由消息直接跳转到对应的内容中去
     * @param $ftype int 来源类型 0:系统通知 1:通知公告，2:评论/回复，3:提到，4:消息，5:点赞
     * @param $title string 消息标题
     * @param $content string 消息内容
     * @param $fmod string 来源内容模块标示代码，用于设置回跳地址
     * @return int 新消息的编号
     */

    public function addMsg($uid, $fid, $ftype, $title, $content, $fmod = '') {
        if (!C('mod', $fmod)) {
            showError('不存在的消息类型:' . $fmod);
        }
        $this->_getMyTable($uid);
        $id = $this->insert(array(
            'uid' => $uid,
            'fid' => $fid,
            'fmod' => $fmod,
            'ftype' => $ftype,
            'title' => $title,
            'content' => $content,
            'status' => 2,
            'infotime' => TIME
        ));
        if ($id) {
            D('userNotice')->addNotice($uid, $ftype, 1);
        }
        return $id;
    }

    /*
     * 获取消息列表
     * @param $uid int UID
     * @param $ftype int ftype
     * @return array 消息详细列表
     */

    public function getMsgList($uid, $ftype, $p = 1) {
        $this->_getMyTable($uid);
        $rs = array();
        $rs['items'] = $this->where(array('status' => 2, 'ftype' => $ftype, 'uid' => $uid))->page($p)->findAll();
        $rs['total'] = $this->getTotal();
        return $rs;
    }

    /*
     * 获取消息详情
     * @param $id int 消息ID
     * @param $uid int UID
     * @return array 消息详细内容
     */

    public function getMsgDetail($id, $uid) {
        $this->_getMyTable($uid);
        $rs = $this->where(array('mid' => $id, 'uid' => $uid))->find();
        if ($rs) {
            D('userNotice')->clearNotice($uid, $rs['ftype']);
        }
        return $rs;
    }

    /*
     * 设置消息状态
     * @param $id int 消息ID
     * @param $uid int UID
     * @param $status int 消息状态 0:删除 1:已读（默认） 2:未读
     * @return int 影响行数
     */

    public function setMsgStatus($id, $uid, $status = 1) {
        $this->_getMyTable($uid);
        return $this->update(array('status' => $status), array('mid' => $id, 'uid' => $uid));
    }

    /*
     * 删除用户的信息
     * @param $uid int UID
     * @param $status int 删除类型 0:删除 1:已读（默认） 2:未读 3：全部
     * @return int 影响行数
     */

    public function delMsgByUid($uid, $status) {
        $this->_getMyTable($uid);
        $where = array('uid' => $uid);
        if ($status >= 0 && $status < 3) {
            $where['status'] = $status;
        }
        return $this->delete($where);
    }

    private function _getMyTable($uid) {
        $this->dbTable = 'user_msg_' . substr((string) $uid, -1, 1);
        return true;
    }

}
